Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.01.2015, 01:03
Новичок на форуме
Отправить личное сообщение для furashcka Посмотреть профиль Найти все сообщения от furashcka
 
Регистрация: 29.04.2014
Сообщений: 6

Помощь в разборе работы скрипта
Здравствуйте)))

вот код
var countF = 0;
	var input;
	$("#load").change(function() {
		countF = this.files.length -1;
		input  = this;
		
		readURL(this, 0);
		$(".Bar").show();
		upload(this.files[0], onSuccessUpload, onError, onProgress);
	});

    function readURL(input, idFile) {
        if (input.files && input.files[idFile]) {
            var reader = new FileReader();

            reader.onload = function (e) {
				html = '<img src=' + e.target.result + '>';

            }

            reader.readAsDataURL(input.files[idFile]);
        }
    }

	function onSuccessUpload(data) {

		data = JSON.parse(data);
		
		if(data.success != 0)
	               console.log("ok");
		else
			console.log(data.error);
	}
	
	function onError() {

	}
	
	function onProgress(loaded, total) {
	  proc = (loaded / total) * 100;
	  $(".Bar").css("width",proc + "%");
	}
	
	function upload(file, onSuccessUpload, onError, onProgress) {
	
	  var xhr = new XMLHttpRequest();
	
	  xhr.onload = xhr.onerror = function() {
		if(this.status != 200 || this.statusText != 'OK') {
		  onError(this);
		  return;
		}
		
		onSuccess(this.responseText);
	  };
	
	  xhr.upload.onprogress = function(event) {
		onProgress(event.loaded, event.total);
	  }
	
	  xhr.open("POST", SADRESS + "load.php", true);
	  var formData = new FormData();
	  formData.append("photo", file);
	  xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
	  xhr.timeout = 300000;

	  xhr.send(formData);
	}



пример работы такого скрипта -

1. Выбираем фото отслеживаем изменение формы <input type="file" name="photo">

2. С помощью var reader = new FileReader(); показываем фото, которое в данный момент загружаем

3. Отправляем на сервер и отображаем процесс загрузки

Все работает!) но есть один непонятный баг...

Если мы выбираем фото размером не больше 2мб то работает все как надо: отображается превью, после появляется бар загрузки и загружается фото (дальше с него делаем превью)

А если выбрать фото например весом в 15мб, тут происходит странное для меня:

показывается бар загрузки, он начинает менять свое значение, в это время подгружается превью, потом бар загрузки доходит до конца 100% (не всегда до 100%) и начинается с 0% как будто мы снова выбрали файл.

Что я вижу на сервере: вместо одной фотки я получил две, то есть php скрипт отработал два раза, самое странное что в консоли я вижу только один post запрос, думал что в php ошибся, час исправлял этот скриптик, перебирал разные варианты ничего не помогло...

Потом решил для ускорения загрузки пока не пользоваться функцией function readURL(input, idFile) которая отображает превью (base64), и скрипт php загружает только одну фотографию, то есть работает как задумывалось!

Как мне исправить чтобы и превью отображалось размером до 50мб и загружалась только одна фотка, чтобы php скрипт отрабатывал один раз, а не два.

В чем дело подскажите дереву?))
Ответить с цитированием
  #2 (permalink)  
Старый 19.01.2015, 04:32
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 457

furashcka, попробуй URL.createObjectURL вместо FileReader.
Ответить с цитированием
  #3 (permalink)  
Старый 19.01.2015, 14:17
Новичок на форуме
Отправить личное сообщение для furashcka Посмотреть профиль Найти все сообщения от furashcka
 
Регистрация: 29.04.2014
Сообщений: 6

Почитал про этот способ! Применил, не помогло... у меня складывается такое ощущение, что браузер при одновременной загрузки фото и ее же отправки, ожидая ответ от сервера перестраховавается и отправляет 2 раза заголовки...
Ответить с цитированием
  #4 (permalink)  
Старый 19.01.2015, 14:28
Новичок на форуме
Отправить личное сообщение для furashcka Посмотреть профиль Найти все сообщения от furashcka
 
Регистрация: 29.04.2014
Сообщений: 6

Заметил одну закономерность, если ждем ответа больше 30 секунд, бар начинает по новой загрузку с 0% то есть браузер по истечению 30с отправляет повторно заголовки, как это запретить?
Ответить с цитированием
  #5 (permalink)  
Старый 19.01.2015, 18:29
Новичок на форуме
Отправить личное сообщение для furashcka Посмотреть профиль Найти все сообщения от furashcka
 
Регистрация: 29.04.2014
Сообщений: 6

Rise, нашел плагин, среди остальных самый легкий - http://malsup.com/

Пример - http://malsup.com/jquery/form/progress2.html

Настроил, попробывал отправить картинку размером 30мб ждем 30с и опять таже история, вместо одной две...

я даже убрал отображение превью, помогает, но через раз...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приостановка работы скрипта onejsquestion Общие вопросы Javascript 3 23.12.2016 18:50
Объясните принцип работы скрипта jaxmackey Общие вопросы Javascript 5 06.08.2014 23:19
Скорость работы js скрипта Severtain Общие вопросы Javascript 1 23.05.2013 21:12
Два скрипта конфликтуют. Нужна помощь! TaH4uk.pro jQuery 0 01.12.2012 20:47
Подвисание работы скрипта mel63 jQuery 0 09.09.2011 16:41